﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using CncConvProg.Model.ConversationalStructure.Abstraction;
using CncConvProg.Model.FileManageUtility;
using CncConvProg.Model.ToolMachine;
using CncConvProg.ViewModel.CommonViewModel;
using CncConvProg.ViewModel.MVVM_Library;

namespace CncConvProg.ViewModel.Dialog
{
    public class FaseDiLavoroViewModel : ViewModelBase
    {
        public FaseDiLavoro FaseDiLavoro
        {
            get
            {
                return _fase;
            }
        }
        private readonly FaseDiLavoro _fase;

        public FaseDiLavoroViewModel(FaseDiLavoro fase)
        {

            _fase = fase;

            var ms = PathFolderHelper.GetToolMachines();

            /* Carico lista macchine */
            switch (_fase.TipoFase)
            {
                case FaseDiLavoro.TipoFaseLavoro.Centro:
                    MachineList = new ObservableCollection<ToolMachine>(ms.OfType<VerticalMill>());
                    break;
                case FaseDiLavoro.TipoFaseLavoro.Tornio3Assi:
                    MachineList = new ObservableCollection<ToolMachine>(ms.OfType<LatheAxisC>());
                    break;
                case FaseDiLavoro.TipoFaseLavoro.Tornio2Assi:
                    MachineList = new ObservableCollection<ToolMachine>(ms.OfType<HorizontalLathe2Axis>());
                    break;
            }
        }
        public double LimitatoreGiri
        {
            get { return _fase.LimitatoreTornio; }
            set
            {
                _fase.LimitatoreTornio = value;
                OnPropertyChanged("LimitatoreGiri");
            }
        }

        public string DescrizioneFase
        {
            get { return _fase.Descrizione; }
            set
            {
                _fase.Descrizione = value;
                OnPropertyChanged("DescrizioneFase");
            }
        }

        public double NoChangeToolSecureZ
        {
            get { return _fase.NoChangeToolSecureZ; }

            set
            {
                _fase.NoChangeToolSecureZ = value;
                OnPropertyChanged("NoChangeToolSecureZ");
            }
        }

        public string Descrizione
        {
            get { return _fase.Descrizione; }
            set
            {
                _fase.Descrizione = value;
                OnPropertyChanged("Descrizione");
            }
        }


        public int SetupFixtureTime
        {
            get
            {
                return _fase.AverageSetupFixtureTime;
            }
            set
            {
                _fase.AverageSetupFixtureTime = value;
                OnPropertyChanged("SetupFixtureTime");
            }
        }
        public int LoadingMaterialTime
        {
            get
            {
                return _fase.MachineLoadingTime;
            }
            set
            {
                _fase.MachineLoadingTime = value;
                OnPropertyChanged("LoadingMaterialTime");
            }
        }

        public int TempoSetupTool
        {
            get { return _fase.AverageMountingToolTime; }
            set
            {
                _fase.AverageMountingToolTime = value;
                OnPropertyChanged("TempoSetupTool");
            }
        }

        public int TempoProgrammazioneOperazione
        {
            get { return _fase.AverageProgrammingOperationTime; }
            set
            {
                _fase.AverageProgrammingOperationTime = value;
                OnPropertyChanged("TempoProgrammazioneOperazione");
            }
        }

        public ToolMachine MacchinaSelezionata
        {
            get
            {
                return MachineList.Where(m => m.MachineGuid == _fase.MachineGuid).FirstOrDefault();
            }
            set
            {
                if (value != null)
                {
                    _fase.MachineGuid = value.MachineGuid;
                }
            }
        }

        private ObservableCollection<ToolMachine> _machineList;
        public ObservableCollection<ToolMachine> MachineList
        {
            get
            {
                return _machineList;
            }
            set
            {
                _machineList = value;
                OnPropertyChanged("MachineList");
            }
        }

        /*
         * Per ora metto le origini nella classe base per la fase , poi dovrei metterle solamente 
         * nella fase di centro di lavoro visto che  
         */
    }
}


